const { wxLogin } = require('./util/login.js');

// 调用 App 方法用来创建应用程序实例对象
// 定义应用程序的生命周期事件
App({
  // 定义全局变量
  globalData: {
    // 音乐播放状态
    g_isMusic: false,
    g_newsId: null,
    m_url: 'http://t.yushu.im',
    code: '',
    userInfo: null, 
  },

  // 定义全局方法
  

  /**
   * 当小程序初始化完成时，会触发 onLaunch（全局只触发一次）
   */
  onLaunch () {
    // wxLogin().then(code => {
    //   this.globalData.code = code;
    // });

    // 检测登录状态
    this.checkLoginStatus();

    this.fetchSystemInfo();
  },

  // 检查本地 storage 中是否存在登录状态
  /**
   * 如果只是用 wx.login 做快速登录，可以不用管 checkSession；如果后台需要使用微信的 session_key 字段时，才需要 checkSession
   */
  checkLoginStatus() {
    const loginFlag = wx.getStorageInfoSync('loginFlag');
    if (loginFlag) {
      const _this = this;
      // 校验 session_key 是否过期
      wx.checkSession({
        // session_id 有效（未过期）
        success() {
          const userStorageInfo = wx.getStorageSync('userInfo');
          if (userStorageInfo) {
            _this.globalData.userInfo = JSON.parse(userStorageInfo);
          } else {
            _this.showInfo('缓存信息缺失');
          }
        },
        // session_id 过期
        fail() {
          _this.doLogin();
        }
      });
    } else {
      this.doLogin();
    }
  },

  // 登录操作
  doLogin({rawData, signature, encryptedData, iv}, cb) {
    const _this = this;
    wx.login({
      success(loginRes) {
        console.log(loginRes, 'login>>>02');
        if(loginRes.code) {
          wx.getUserInfo({
            withCredentials: true,
            success(infoRes) {
              var userInfo = infoRes.userInfo
          //     var nickName = userInfo.nickName
          //     var avatarUrl = userInfo.avatarUrl
          //     var gender = userInfo.gender	// 性别：0：未知、1：男、2：女
          //     var province = userInfo.province
          //     var city = userInfo.city
          //     var country = userInfo.country
              console.log(infoRes, 'infoRes');
              // 向自己的服务端发送请求
              wx.request({
                // url: 'http://127.0.0.1:8888/api/wechat/v1/login',
                url: 'http://127.0.0.1:9090/api/v1/wechat/code',
                method: "POST",
                data: {
                  code: loginRes.code,    // 临时登录凭证
                  rawData,                // 用户非敏感信息
                  signature,              // 签名
                  encryptedData,          // 用户敏感信息
                  iv,                     // 解密敏感信息的向量
                },
                success({ data = {} }) {
                  console.log(data, 'login>>>03');
                  const { result,  errMsg } = data;
                  const { userInfo, skey } = data.data;
                  console.log(result, result === 0, skey, 'p');
                  if (result === 0) {
                    _this.globalData.userInfo = userInfo;
                    wx.setStorageSync("userInfo", JSON.stringify(userInfo))
                    wx.setStorageSync("loginFlag", skey)
                    typeof cb === "function" && cb();
                  } else {
                    _this.showInfo(errMsg)
                  }
                },
                fail() {
                  _this.showInfo("调用接口失败 ")
                }
              })
            },

          //   fail() {
          //     // wx.hideLoading()
          //     _this.checkUserInfoPermission()
          //   }
          })
        } else {
          console.log("登录失败");
          console.log(loginRes.errMsg)
        }
      }
    })
  },

  // 检查用户授权的设置
  checkUserInfoPermission() {
    wx.getSetting({
      success (res) {
        console.log(res.authSetting)
        // res.authSetting = {
        //   "scope.userInfo": true,
        //   "scope.userLocation": true
        // }
        if (!res.authSetting['scope.userInfo']) {
          console.log('object4444');
          wx.openSetting({
            success (res) {
              console.log(res.authSetting)
              // res.authSetting = {
              //   "scope.userInfo": true,
              //   "scope.userLocation": true
              // }
            }
          })
        }
      },
      fail(error) {
        console.log(error);
      }
    })
  },

  // 获取用户的登录标识
  getLoginFlag() {
    return wx.getStorageSync('loginFlag')
  },

  // 封装 wx.showToast 方法
  showInfo() {

  },

  // 获取书籍已经下载的路径
  getDownloadPath() {

  },
  // 封装 wx.savefiles 将下载的文件保存在本地
  saveDownloadPath(key, filePath) {

  },

  // 打开书籍
  openBook(filePath) {

  },
 
  /**
    //    * 异步往app上挂载数据，在其他文件中调用
    //    * app并不会得到挂载的数据
    //    * 所以取到的数据不挂载到app上了而是存在本地
    //    */

  /**
   TODO
   * 当小程序启动，或从后台进入前台显示，会触发 onShow
   */
  onShow(options) {
    const { scene = 0, shareTicket = '' } = options;

    // 判断场景值，1044 为转发场景
    if (scene == 1044) {
      wx.getShareInfo({
          shareTicket,
          success: (res) => {
            console.log(res, "[0");
          }
      });
    }

    this.fetchAccountInfoSync();
  },

  /**
   * 当小程序从前台进入后台，会触发 onHide
   */
  onHide () {
    
  },

  /**
   * 当小程序发生脚本错误，或者 api 调用失败时，会触发 onError 并带上错误信息
   */
  onError(msg) {

  },

  getUserInfo: function (cb) {
    var that = this;
    if (this.globalData.userInfo) {
      typeof cb == "function" && cb(this.globalData.userInfo);
    } else {
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo;
              typeof cb == "function" && cb(that.globalData.userInfo);
            },
          });
        },
      });
    }
  },

  fetchSystemInfo() {
    
    wx.getSystemInfo({
      success(res) {
        console.log(res);
    }
    })
  },

  // 根据开发环境配置请求地址
  fetchAccountInfoSync() {
    const { miniProgram = {} } = wx.getAccountInfoSync();
    const env = miniProgram.envVersion
    console.log("accountInfo", miniProgram);
    if(!env){
      console.error("获取运行环境失败!");
    }
    const baseApi = {
      // 开发版
      develop: "https://test.domain.cn",
      // 体验版
      trial: "https://test.domain.cn",
      // 正式版
      release: "https://domain.cn"
    };
    // request请求baseURL
    const SERVER_API = baseApi[env] ||'https://domain.cn';
  }
})
